package com.dao;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.FetchMode;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;
import org.springframework.dao.DataAccessException;

import com.model.Usuario;
import com.query.UsuarioQuery;

public class UsuarioDAOImpl extends BaseHibernateDAO<Usuario, UsuarioQuery> {

	@Override
	public Class<Usuario> getModelClass() {
		return Usuario.class;
	}
	
	@Override
	public Usuario findBy(String usuario) throws DataAccessException 
	{
		DetachedCriteria criteria = DetachedCriteria.forClass(Usuario.class);
		criteria.add(Restrictions.eq("usuario", usuario));
		Usuario object = (Usuario) getHibernateTemplate().findByCriteria(criteria).get(0);
		return object;
	}

	@Override
	public List<String> getListNames() {
		List<String> list = new ArrayList<String>();
		list.add("rolEnumList");
		return list;
	}

	@SuppressWarnings("unchecked")
	@Override
	public Usuario get(String query) throws DataAccessException {

		DetachedCriteria criteria = DetachedCriteria.forClass(Usuario.class);

		criteria.add(Restrictions.eq("usuario", query));
		
		for (String listName : getListNames()) {
			criteria.setFetchMode(listName, FetchMode.JOIN);
		}

		List<Usuario> listaUsuarios = (List<Usuario>) getHibernateTemplate()
				.findByCriteria(criteria);

		if (listaUsuarios.size() > 0) {
			return listaUsuarios.get(0);
		}

		return null;
	}

}
